
//定义状态变量
import {MockUtil} from "../../util/mock.js";
import {AuthUtil} from "../../util/auth.js";
import {DynamicRouteUtil} from "../../util/dynamicRoutes.js";
import $storage from "../../util/localStorage.js";

const state = {
    tokenValue:'',
    // demo23 从 localStorage 里面获取的菜单列表
    menuList: $storage.getJson('menuList') || [],
}

/**
 //定义修改状态的同步方法
 //通过commit调用mutations定义的方法
 */

const mutations = {
    SET_TOKEN_VALUE(state,value){
        state.tokenValue = value
    },
    //demo23
    UPDATE_USER_MENU_LIST(state, menuList) {
        // 取反：原来如果是折叠状态，那么就改为展开状态，反之亦然
        state.menuList = menuList;
        // 保存到 localStorage 里面
        $storage.set('menuList', JSON.stringify(menuList));
    }
}
/**
 通过dispatch调用actions定义的方法
 */

const actions = {
    updateTokenValue({commit},tokenValue){
        console.log('----============')
        commit('SET_TOKEN_VALUE',tokenValue)
    },
    updateTokenValue2( { state, commit, dispatch, getters },tokenValue){
        console.log( 'state',state  )
        console.log(  'commit==>调用mutations对象中的方法',commit,  )
        console.log(  'dispatch==>调用actions中的方法', dispatch  )
        console.log( 'getters', getters.getTokenValue )
        // commit('SET_TOKEN_VALUE',tokenValue)
        dispatch('updateTokenValue',tokenValue)
    },
    //调用后端的登录接口
    handleLogin({commit},request){
        return new Promise((resolve,reject)=>{
            console.log('调用store中login/handleLogin方法==>',request)
            //TODO这里调用后端的登录接口，获取登录成功的token信息
            //登录成功，保存token到本地缓存
            localStorage.setItem('token','123456')
            return resolve({
                code:200,
                message:'登录成功',
                data:{
                    token:'123456'
                }
            })
        })
    },

    /**
     * demo23 调用后端接口，获取用户菜单列表
     */
    getUserMenuList({commit}) {
        return new Promise((resolve, reject) => {
            // todo 这里可以调用后端接口，获取用户菜单列表
            // todo 模拟获取到的接口数据
            // todo 这里到时候对接后端的时候，只需要打开注释内容，修改getMenuList()方法即可
            // getUserMenu().then((res) => {
            // const menuList = res.data;
            // todo 假设数据获取成功
            const menuList = MockUtil.gteMenuData(AuthUtil.getToken());
            // 将后端返回的菜单数据，解析成 VueRouter 中的路由格式
            const routeMenuList = DynamicRouteUtil.parseRouteMenu(menuList);
            // 保存到 localStorage 里面
            commit('UPDATE_USER_MENU_LIST', routeMenuList);
            // 将获取到的菜单数据返回
            resolve(routeMenuList);
            // }).catch((err) => {
            //     console.log('获取用户菜单失败:err=', err);
            //     reject(err);
            // });
        });
    },
}

const getters = {
    getTokenValue(state){
        return state.tokenValue
    }
}


export default{
    namespaced:true,
    state,
    mutations,
    actions
}



